﻿//题目描述
//金明今天很开心，家里购置的新房就要领钥匙了，新房里有一间他自己专用的很宽敞的房间。
//更让他高兴的是，妈妈昨天对他说：“你的房间需要购买哪些物品，怎么布置，你说了算，只要不超过 N 元钱就行”。
//今天一早金明就开始做预算，但是他想买的东西太多了，肯定会超过妈妈限定的 N 元。
//于是，他把每件物品规定了一个重要度，分为 5 等：用整数 1−5 表示，第 5 等最重要。
//他还从因特网上查到了每件物品的价格（都是整数元）。
//他希望在不超过 N 元（可以等于 N 元）的前提下，使每件物品的价格与重要度的乘积的总和最大。
//设第j件物品的价格为 vj​，重要度为 wj​，共选中了 k 件物品，编号依次为 j1​, j2​, …, jk​
//，则所求的总和为：vj1​​×wj1​+ vj2​×wj2​… + vjk​×wjk
//请你帮助金明设计一个满足要求的购物单。
//输入格式
//第一行，为 2 个正整数，用一个空格隔开：n, m（n < 30000, m < 25）其中 n 表示总钱数，m 为希望购买物品的个数。
//从第 2 行到第 m + 1 行，第 j 行给出了编号为 j−1 的物品的基本数据，
//每行有 2 个非负整数 v, p（其中 v 表示该物品的价格(v≤10000)，p 表示该物品的重要度（1≤p≤5）。
//输出格式
//1 个正整数，为不超过总钱数的物品的价格与重要度乘积的总和的最大值（ < 100000000）。
//输入输出样例
//输入
//1000 5
//800 2
//400 5
//300 5
//400 3
//200 2
//输出 
//3900
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll p[30], v[30], dp[30005];//p[i]存储价格,v[i]存储总价值
int main() {
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	ll m, n; cin >> n >> m;
	for (int i = 1; i <= m; ++i) {
		int x;//x表示权重
		cin >> p[i] >> x;
		v[i]= x* p[i];//v[i]表示总价值
	}
	for (int i = 1; i <= m; ++i) {
		for (int j = n; j >= p[i]; --j) {
			dp[j] = max(dp[j], dp[j - p[i]] + v[i]);
		}
	}
	cout << dp[n];
	return 0;
}